package suanfa;

import java.util.HashMap;
import java.util.Map;
//给你一个整数数组 nums 和一个整数 k ，请你统计并返回 该数组中和为 k 的子数组的个数 。
//子数组是数组中元素的连续非空序列。
//示例 1：
//输入：nums = [1,1,1], k = 2
//输出：2
//示例 2：
//输入：nums = [1,2,3], k = 3
//输出：2
public class subarraySum {
    public int subarraySum(int[] nums, int k) {
        Map<Integer,Integer> hash=new HashMap<>();
        hash.put(0,1);
        int sum=0,ret=0;
        for(int x: nums){
            sum +=x;//计算当前位置的前缀和
            ret +=hash.getOrDefault(sum-k,0);//统计结果,查看前缀和之前有没有sum-k的数字，有的话，则代表中间有一段的和为k。
            hash.put(sum,hash.getOrDefault(sum,0)+1);//把当前的前缀和丢到哈希表里面，方便上面来查找
        }
        return ret;
    }
}
